package com.tecklab.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.tecklab.demo.entity.EmployeeEntity;
import org.apache.ibatis.annotations.Mapper;

/**
 * 用户Mapper接口
 */
/**@Mapper的作用：“告诉 Spring：这是一个数据库操作接口，请把我注册成一个 Bean，并生成一个代理对象，可以用来执行 SQL。”
 * MyBatis-Plus 会在项目启动时：
 * 扫描所有加了 @Mapper 的接口
 * 为每个接口动态生成实现类（代理对象）
 * 这个实现类知道怎么根据方法名、参数、实体类自动拼 SQL
 * ✅ 比如调用 employeeMapper.selectById(1)，
 * 框架会自动生成SELECT id, name, department_id FROM employee WHERE id = 1
 */
@Mapper
/*（EmployeeMapper）是一个接口，要继承 BaseMapper 这个‘万能模板’，并且告诉它：是专门用来操作 Employee 这个类对应的数据表。*/

public interface EmployeeMapper extends BaseMapper<EmployeeEntity> {

/**什么时候需要“写方法”？
 *虽然大多数基础操作都不用写，但如果你要执行复杂查询，就需要自己定义方法。
 *✅ 示例：查询某个部门的所有员工
 *   // 自定义方法（MyBatis-Plus 不会自动生成）
 * /* @Select("SELECT * FROM employee WHERE department_id = #{deptId}")
 *  List<Employee> findByDepartmentId(@Param("deptId") Integer departId);
 *
 *  或者用 MyBatis-Plus 的 Wrapper 条件构造器：
 *  / 在 Service 中使用
 * List<Employee> list = employeeMapper.selectList(
 *     new QueryWrapper<Employee>()
 *         .eq("department_id", 101)
 *         .like("name", "张")
 * );
 *
 * 总结：为什么“不需要写任何方法”？
 * 原因	                            说明
 * 🧩 继承机制	extends BaseMapper<Employee> 自动获得所有基础方法
 * ⚙️ 框架智能	MyBatis-Plus 能根据实体类自动映射表名、字段名
 * 🤖 动态代理	Spring + MyBatis-Plus 在运行时自动生成实现类
 * 📦 开箱即用	增删改查90%的场景都已内置，无需重复造轮子
 *
 * 📌 给初学者的建议
 * 先相信框架：不要怀疑“为什么没写方法还能用”，这是现代框架的“魔法”。
 * 先用起来：尝试调用 mapper.selectById(1)，你会发现它真的能查数据！
 * 再深入理解：等你熟悉了，再去了解“动态代理”、“反射”、“SQL 自动拼接”等底层原理。
 * 🚀 最后一句话总结
 * “extends BaseMapper<Employee> 就像给你的 Mapper 装了一个‘数据库外挂’，所有基础操作它都会，你只需要专注业务逻辑！”
 *
 * 如果您理解了这个思想，恭喜您，已经迈入了现代 Java 开发的大门！🎉
 */



}
